import axios from 'axios'

// 通过axios创建request对象
const request = axios.create({
    // 设置超时
    timeout: 5000,
    // 设置baseURL
    baseURL: '/api'
})

// request 拦截器
request.interceptors.request.use(config => {
    console.log(config)
    config.headers['Content-Type'] = 'application/json;charset=utf-8'
    let token = localStorage.getItem('TOKEN')
    if (token) {
        config.headers['token'] = token
    }
    if (config.url === undefined) {
        return Promise.reject('url is undefined')
    }
    // get请求处理
    if (config.method === 'get') {
        let url = config.url + '?'
        if (config.data) {
            for (const propName of Object.keys(config.data)) {
                const value = config.data[propName]
                if (value !== null && typeof (value) !== "undefined") {
                    url = url + propName + "=" + value + "&"
                    //关于分页对象的处理
                    // if ("query" === propName) {
                    //     const query = config.data[propName];
                    //     url = url + propName + "=";
                    //     let urlWithEncode = '';
                    //     for (const key of Object.keys(query)) {
                    //         if (key !== null &&
                    //             typeof (key) !== "undefined" &&
                    //             query[key] !== null &&
                    //             query[key] !== "" &&
                    //             typeof (query[key]) !== "undefined") {
                    //             urlWithEncode = urlWithEncode + "[" + key + ":" + query[key] + "]"
                    //         }
                    //     }
                    //     urlWithEncode = encodeURI(urlWithEncode);
                    //     url = url + urlWithEncode + "&";
                    // } else {
                    //     url = url + propName + "=" + value + "&";
                    // }
                }
            }
        }
        url = url.slice(0, -1)
        config.url = url
    }
    return config;
}, error => {
    return Promise.reject(error)
});

// response 拦截器
// 可以在接口响应后统一处理结果
request.interceptors.response.use(
    response => {
        // axios固定写法
        let res = response.data
        // 如果是返回的文件
        if (response.config.responseType === 'blob') {
            return res
        }
        // 兼容服务端返回的字符串数据
        if (typeof res === 'string') {
            res = res ? JSON.parse(res) : res
        }
        if (res.code == 500) {
            // Vue.prototype.$message.error(res.msg)
            return Promise.reject(res.data)
        } else if (res.code == 401) {
            // Vue.prototype.$message.warning("请重新登录")
        } else if (res.code != 200) {
            // Vue.prototype.$message.error(res.msg)
            return Promise.reject('error')
        }
        return Promise.resolve(res);
    },
    error => {
        // console.log('err' + error) // for debug
        return Promise.reject(error)
    }
)


export default request
